#!/bin/bash

# DaoHang数据库权限修复脚本

echo "开始修复数据库权限问题..."

# 项目信息
PROJECT_PATH="/www/wwwroot/daohang"
DB_PATH="$PROJECT_PATH/daohang.db"
SERVICE_NAME="daohang"

# 检查项目目录是否存在
if [ ! -d "$PROJECT_PATH" ]; then
    echo "❌ 错误：项目目录不存在: $PROJECT_PATH"
    echo "请先运行部署脚本创建项目目录"
    exit 1
fi

echo "📂 项目目录: $PROJECT_PATH"
echo "🗄️ 数据库文件: $DB_PATH"

# 停止服务
echo "停止DaoHang服务..."
systemctl stop $SERVICE_NAME 2>/dev/null || true

# 创建数据库目录
echo "确保数据库目录存在..."
mkdir -p $(dirname $DB_PATH)

# 如果数据库文件不存在，创建一个空文件
if [ ! -f "$DB_PATH" ]; then
    echo "创建数据库文件..."
    touch "$DB_PATH"
else
    echo "数据库文件已存在"
fi

# 设置正确的所有者和权限
echo "设置文件所有者和权限..."

# 设置项目目录权限
chown -R www:www "$PROJECT_PATH"
chmod -R 755 "$PROJECT_PATH"

# 设置数据库文件权限
chown www:www "$DB_PATH"
chmod 644 "$DB_PATH"

# 设置数据库目录权限
chown www:www $(dirname "$DB_PATH")
chmod 755 $(dirname "$DB_PATH")

# 检查www用户和组是否存在
if ! id -u www >/dev/null 2>&1; then
    echo "⚠️  警告：用户'www'不存在，尝试创建..."
    useradd -r -s /bin/false www 2>/dev/null || true
fi

if ! getent group www >/dev/null 2>&1; then
    echo "⚠️  警告：组'www'不存在，尝试创建..."
    groupadd www 2>/dev/null || true
fi

# 验证权限设置
echo ""
echo "验证权限设置..."
echo "项目目录权限:"
ls -la $(dirname "$PROJECT_PATH") | grep $(basename "$PROJECT_PATH")

echo ""
echo "数据库文件权限:"
if [ -f "$DB_PATH" ]; then
    ls -la "$DB_PATH"
else
    echo "数据库文件不存在"
fi

echo ""
echo "数据库目录权限:"
ls -la $(dirname "$DB_PATH")

# 测试数据库文件访问
echo ""
echo "测试数据库文件访问权限..."
if sudo -u www test -r "$DB_PATH"; then
    echo "✅ www用户可以读取数据库文件"
else
    echo "❌ www用户无法读取数据库文件"
fi

if sudo -u www test -w "$DB_PATH"; then
    echo "✅ www用户可以写入数据库文件"
else
    echo "❌ www用户无法写入数据库文件"
fi

if sudo -u www test -w $(dirname "$DB_PATH"); then
    echo "✅ www用户可以写入数据库目录"
else
    echo "❌ www用户无法写入数据库目录"
fi

# 重启服务
echo ""
echo "重新启动DaoHang服务..."
systemctl start $SERVICE_NAME

# 等待服务启动
sleep 3

# 检查服务状态
echo ""
echo "检查服务状态..."
if systemctl is-active --quiet $SERVICE_NAME; then
    echo "✅ 服务启动成功"
    systemctl status $SERVICE_NAME --no-pager -l
else
    echo "❌ 服务启动失败，查看日志："
    journalctl -u $SERVICE_NAME -n 20 --no-pager
fi

echo ""
echo "数据库权限修复完成！"
echo ""
echo "如果问题仍然存在，请检查："
echo "1. SELinux是否启用并阻止访问：sestatus"
echo "2. 磁盘空间是否充足：df -h"
echo "3. 数据库目录是否在只读文件系统上：mount | grep $PROJECT_PATH"
echo ""
echo "手动测试命令："
echo "sudo -u www sqlite3 $DB_PATH .tables" 